﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BusinessLogic.ServiceClients;
using System.Configuration;
using BusinessLogic.Entities;

namespace BusinessLogic.Security
{
    public class MySecurityManager
    {
        /// <summary>
        /// Проверяется есть ли у данной конкретной роли право на выполнение конкретного действия
        /// </summary>
        /// <param name="role"></param>
        /// <param name="controllerType"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public bool IsGrantAction(BusinessLogic.Security.UserPrincipal user, Type controllerType, string action)
        {
            return IsGrantAction(user, controllerType.Name, action);
        }


        /// <summary>
        /// Проверяется есть ли у данной конкретной роли право на выполнение конкретного действия
        /// </summary>
        /// <param name="role"></param>
        /// <param name="controllerName"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public bool IsGrantAction(BusinessLogic.Security.UserPrincipal user, string controllerName, string action)
        {
            var mvcActions = (user != null) ? user.MVCActionItems : PermissionMVCActionsByAnonimusRole();
            if (mvcActions == null || mvcActions.Count() == 0)
                return false;

            var mvcAction = mvcActions.Where(a => a.Name.ToLower() == action.ToLower()).FirstOrDefault();
            if (mvcAction != null)
                return true;
            else
                return false;
        }



        /// <summary>
        /// Возвращается список доступных действий для анонимной роли
        /// </summary>
        /// <returns></returns>
        public List<MVCActionEntity> PermissionMVCActionsByAnonimusRole()
        {
            try
            {
                var client = new AuthClient();
                var role = client.GetAnonimusRole();

                if (role == null)
                    return null;

                return role.PermissionMVCActions.Select(p => p.MVCAction).ToList();

            }
            catch (Exception ex)
            {
                return null;
            }
        }

    }
}
